package org.swimv2.servlet;

import java.io.IOException;
import java.util.Properties;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.rmi.PortableRemoteObject;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.swimv2.controller.GestioneAmicizia;
import org.swimv2.controller.GestioneAmiciziaRemote;
import org.swimv2.controller.GestioneUtente;
import org.swimv2.controller.GestioneUtenteRemote;
import org.swimv2.exception.FriendshipException;
import org.swimv2.model.Persona;

/**
 * Servlet implementation class AggiungiAmicoServlet
 */
public class AggiungiAmicoServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public AggiungiAmicoServlet() {
        super();
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        
        Properties props = new Properties();
		props.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
		props.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
		props.put(Context.PROVIDER_URL, "jnp://localhost:1099");
		Context ctx;
		
		try{
			
			ctx = new InitialContext(props);
			Object obj = ctx.lookup(GestioneAmicizia.JNDI_NAME);
			GestioneAmiciziaRemote manager = (GestioneAmiciziaRemote) PortableRemoteObject.narrow(obj, GestioneAmiciziaRemote.class);
			
			Persona utenteVisitato = (Persona) request.getSession().getAttribute("utenteVisitato");
			String userIDvisitato = utenteVisitato.getUserID();
			
			Persona utente = (Persona) request.getSession().getAttribute("utente");
			String userID = utente.getUserID();
			
			boolean giaAmici = manager.checkAmicizia(userID, userIDvisitato);
			request.setAttribute("giaAmici", giaAmici);
			request.getRequestDispatcher("WEB-INF/paginaProfiloUtente.jsp").
			forward(request, response);
		}
		catch(NamingException e){
			e.printStackTrace();
			
		}
				
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        
        Properties props = new Properties();
		props.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
		props.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
		props.put(Context.PROVIDER_URL, "jnp://localhost:1099");
		Context ctx;
		
		try{
			
			ctx = new InitialContext(props);
			Object obj = ctx.lookup(GestioneAmicizia.JNDI_NAME);
			GestioneAmiciziaRemote manager = (GestioneAmiciziaRemote) PortableRemoteObject.narrow(obj, GestioneAmiciziaRemote.class);
			
			obj = ctx.lookup(GestioneUtente.JNDI_NAME);
			GestioneUtenteRemote managerUtente = (GestioneUtenteRemote) PortableRemoteObject.narrow(obj, GestioneUtenteRemote.class);
			
			String tipoAmicizia = (String) request.getParameter("tipoAmicizia");
			Persona utenteVisitato;
			
			
			Persona utente = (Persona) request.getSession().getAttribute("utente");
			String userID = utente.getUserID();
			
			
			
			
			if(tipoAmicizia==null){
				
				utenteVisitato = (Persona) request.getSession().getAttribute("utenteVisitato");
				String userIDvisitato = utenteVisitato.getUserID();
				
				try {
					manager.creaRichiestaAmicizia(userID, userIDvisitato);
					String messaggio = "Richiesta di amicizia inviata correttamente";
					request.setAttribute("messaggio", messaggio);
				} catch (FriendshipException e) {
						request.setAttribute("messaggio", e.getError());
					}
				
				
			}
			else{
				
				String userIDinvitato = request.getParameter("username");
				utenteVisitato = managerUtente.getUtente(userIDinvitato);
				try {
		  			manager.aggiungiAmicoIndiretto(userID,userIDinvitato);
		  		} catch (FriendshipException e) {
		  			request.setAttribute("messaggio", e.getError());
		  		}
				 
			}

			RequestDispatcher disp;
			disp = request.getRequestDispatcher("/VisualizzaProfiloUtente");
			request.getSession().setAttribute("utenteVisitato",utenteVisitato);
			request.setAttribute("username", utenteVisitato.getUserID());
			disp.forward(request, response);
		}
		catch (NamingException e) {
			e.printStackTrace();
		}

	}
}
